/*
 * VakjeButton.java
 *
 * Created on 27 february 2008, 17:11
 *
 * @author Caribou
 */
package be.hogent.iii.project.gui;

import be.hogent.iii.project.objects.Coordinaat;
import be.hogent.iii.project.objects.Entiteit;
import be.hogent.iii.project.objects.vakken.Vak;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.io.File;
import java.util.ArrayList;
import java.util.Properties;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.SwingConstants;

/**
 * Swing component afgeleid van JLabel die een vakje in ons
 * Speelveld voorstelt 
 */
public class VakjeButton extends JButton {

    private static final long serialVersionUID = 1L;
    private static final int BREEDTE = 50;
    private static final int HOOGTE = 50;
    
    public static int getBreedte() {
        return BREEDTE;
    }

    public static int getHoogte() {
        return HOOGTE;
    }
    private int Xcoord;
    private int Ycoord;
    private BottomPaneel bp;
    private Vak vak;
    private Properties props;
    private int aantalEntiteiten;
    private int aantalBewegingsRanden;
    
    private ArrayList<Coordinaat> pad;

    /**
     * Constructor om een Button aan te maken die een vakje kan weergeven. 
     * @param vak het bijhorende vakje dat weergegeven moet worden
     * @param Xcoord de x-coordinaat. 
     * @param Ycoord de y-coordinaat
     * @param bp het bottempaneel
     * @param handler
     * @param props
     */
    public VakjeButton(Vak vak, int Xcoord, int Ycoord, BottomPaneel bp, PaneelEventHandler handler, Properties props) {
        super();
        this.bp = bp;

        Dimension grootte = new Dimension(BREEDTE, HOOGTE);
        this.setSize(grootte);
        this.setMaximumSize(grootte);
        this.setMinimumSize(grootte);
        this.setPreferredSize(grootte);
        this.setFont(new Font ("Arial", Font.PLAIN, 20));
        
        this.setVerticalTextPosition(SwingConstants.CENTER);
        this.setHorizontalTextPosition(SwingConstants.CENTER);
        this.setForeground(Color.red);
        

        this.Xcoord = Xcoord;
        this.Ycoord = Ycoord;

        this.setBorder(BorderFactory.createLineBorder(Color.black));
        this.addMouseListener(handler);

        this.vak = vak;

        this.props = props;
        maakLeeg(props);
        
        setOpaque(true);

        this.aantalEntiteiten = 0;
    }

    public void maakLeeg(Properties props) {
        try {
            File bestand = new File(props.getProperty(vak.getClass().getName()));
            this.setIcon(new ImageIcon(ImageIO.read(bestand)));
            this.setText("");
            aantalEntiteiten = 0;
        } catch (Exception ex) {
            System.out.println("icon zetten mislukt\n" + ex.getMessage());
            ex.printStackTrace();
        }
    }

    public void zetEntiteit(Properties props, Entiteit ent) {
        try {
            Coordinaat c = ent.getPlaats();
            File bestand = new File(props.getProperty(ent.getClass().getName()));
            //System.out.println("image: " + bestand.getAbsolutePath());
            //this.setIcon(new ImageIcon(bestand.getAbsolutePath()));
            
            ImageIcon ii = new ImageIcon(bestand.getAbsolutePath());
            this.setIcon(ii);
            
            aantalEntiteiten++;
            this.setText(aantalEntiteiten + "");
        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("icon zetten mislukt");
        }
    }
    
    public void zetGeselecteerd(Color kleur){
        this.setBorder(BorderFactory.createLineBorder(kleur));
    }
    
    public void Selecteer(){
        zetGeselecteerd(Color.RED);
    }
    
    public void deSelecteer(){
        if (aantalBewegingsRanden == 0)
            zetGeselecteerd(Color.BLACK);
        else
            zetGeselecteerd(Color.YELLOW);
    }
    
    public void zetBewegingsRand(){
        if (aantalBewegingsRanden == 0)
            zetGeselecteerd(Color.YELLOW);
        aantalBewegingsRanden++;
    }
    
    public void verwijderBewegingsRand(){
        aantalBewegingsRanden--;
        if (aantalBewegingsRanden == 0)
            zetGeselecteerd(Color.BLACK);
    }

    public int getXcoord() {
        return Xcoord;
    }

    public void setXcoord(int Xcoord) {
        this.Xcoord = Xcoord;
    }

    public int getYcoord() {
        return Ycoord;
    }

    public void setYcoord(int Ycoord) {
        this.Ycoord = Ycoord;
    }

    public BottomPaneel getBp() {
        return bp;
    }

    public Vak getVak() {
        return vak;
    }

    public Properties getProps() {
        return props;
    }

    public ArrayList<Coordinaat> getPad() {
        return pad;
    }

    public void setPad(ArrayList<Coordinaat> pad) {
        this.pad = pad;
    }
    
    
}
